package br.com.jk.financeiro.banco;

import br.com.jk.util.pesquisa.Pesquisa;
import br.com.jk.util.pesquisa.Pesquisa.Tipo;
import br.com.jk.util.pesquisa.PesquisaJDialog;
import java.util.ArrayList;
import java.util.List;
import net.sf.jasperreports.engine.JRException;

/**
 *
 * @author camilo
 */
public class BancoController {

  private Banco banco;
  private int colunaSel;
  private int idEmpresa;
  public boolean modoConsulta;
  private Pesquisa pesquisa = new Pesquisa();

  public BancoController() {
    this.banco = new Banco();
  }

  /**
   * Verifica se todos os campos estão preenchidos, com excessão do campo jtfId
   *
   * @return
   */
  public boolean isNotNull() {
    /*if (dialog.getJtfCnpj().getText().isEmpty()) {
     Util.msgAdv("Campo \"CNPJ\" vazio.");
     dialog.getJtfCnpj().requestFocus();
     return false;
     } else if (dialog.getJtfIe().getText().isEmpty()) {
     Util.msgAdv("Campo \"IE\" vazio.");
     dialog.getJtfIe().requestFocus();
     return false;
     } else if (dialog.getJtfRazao().getText().isEmpty()) {
     Util.msgAdv("Campo \"Razão\" vazio.");
     dialog.getJtfRazao().requestFocus();
     return false;
     } else if (dialog.getJtfIdCidade().getText().isEmpty()) {
     Util.msgAdv("Campo \"Id Cidade\" vazio.");
     dialog.getJtfIdCidade().requestFocus();
     return false;
     } else if (dialog.getJtfCep().getText().isEmpty()) {
     Util.msgAdv("Campo \"CEP\" vazio.");
     dialog.getJtfCep().requestFocus();
     return false;
     } else if (dialog.getJtfRua().getText().isEmpty()) {
     Util.msgAdv("Campo \"Endereço\" vazio.");
     dialog.getJtfRua().requestFocus();
     return false;
     } else if (dialog.getJtfBairro().getText().isEmpty()) {
     Util.msgAdv("Campo \"Bairro\" vazio.");
     dialog.getJtfBairro().requestFocus();
     return false;
     } else if (dialog.getJtfNumero().getText().isEmpty()) {
     Util.msgAdv("Campo \"Nº\" vazio.");
     dialog.getJtfNumero().requestFocus();
     return false;
     } else if (dialog.getJtfFantasia().getText().isEmpty()) {
     Util.msgAdv("Campo \"Nome Fantasia\" vazio.");
     dialog.getJtfFantasia().requestFocus();
     return false;
     }*/
    return true;
  }

  public void salvar(Banco produto) {
    if (produto != null) {
      BancoRn produtoRn = new BancoRn();
      //faz a conexão com o bd e salva os registros
      produtoRn.salvar(produto);
    }
  }

  public List<Banco> listar() {
    BancoRn prn = new BancoRn();
    return prn.listar();
  }

  public void excluir(Banco banco) {
    BancoRn fornRn = new BancoRn();
    fornRn.excluir(banco);
  }

  /**
   * Habilita a pesquisa somente para os campos configurados nesse método
   *
   * @param coluna Índice da coluna da qual se deseja efetuar a pesquisa
   * @return Se o campo estiver habilitado permite a pesquisa. O default é: false;
   */
  public boolean setEnabledPesquisa(int coluna) {
    colunaSel = coluna;
    switch (coluna) {
      case BancoTableModel.COLUNA_COD_ID:
        pesquisa.setTipo(Pesquisa.Tipo.INTEGER);
        return true;
      case BancoTableModel.COLUNA_COD_COD:
        pesquisa.setTipo(Pesquisa.Tipo.STRING);
        return true;
      case BancoTableModel.COLUNA_COD_DESCRICAO:
        pesquisa.setTipo(Pesquisa.Tipo.STRING);
        return true;
      case BancoTableModel.COLUNA_COD_ABREVIADO:
        pesquisa.setTipo(Pesquisa.Tipo.STRING);
        return true;
      default:
        return false;
    }
  }

  public Pesquisa getCriterio(Tipo tipo) {
    return PesquisaJDialog.getCriterio(pesquisa.getTipo());
  }

  public List<Banco> pesquisar() {
    List<Banco> lstPesquisa = new ArrayList<>();
    Pesquisa pesq;
    if (modoConsulta) { //Se estiver habilitada a pesquisa executa o cod abaixo
      BancoRn ctrn = new BancoRn();

      //        Verifica qual é o tipo de campo e executa a consulta específica
      switch (colunaSel) {
        case BancoTableModel.COLUNA_COD_ID:
          pesq = getCriterio(pesquisa.getTipo());//abre a janela solicitando os dados ao usuário
          if (!pesq.isCancel()) {//se o retorno for positivo envia os dados para a jTable
            lstPesquisa = ctrn.pesquisaPadrao(Banco.ATTRIBUTE_ID, Integer.parseInt(pesq.getCriterio()), pesq.getOpcao());
          }
          break;
        case BancoTableModel.COLUNA_COD_COD:
          pesq = getCriterio(pesquisa.getTipo());//abre a janela solicitando os dados ao usuário
          if (!pesq.isCancel()) {//se o retorno for positivo envia os dados para a jTable
            lstPesquisa = ctrn.pesquisaPadrao(Banco.ATTRIBUTE_COD, pesq.getCriterio(), pesq.getOpcao());
          }
          break;
        case BancoTableModel.COLUNA_COD_DESCRICAO:
          pesq = getCriterio(pesquisa.getTipo());//abre a janela solicitando os dados ao usuário
          if (!pesq.isCancel()) {//se o retorno for positivo envia os dados para a jTable
            lstPesquisa = ctrn.pesquisaPadrao(Banco.ATTRIBUTE_DESCRICAO, pesq.getCriterio(), pesq.getOpcao());
          }
          break;
        case BancoTableModel.COLUNA_COD_ABREVIADO:
          pesq = getCriterio(pesquisa.getTipo());//abre a janela solicitando os dados ao usuário
          if (!pesq.isCancel()) {//se o retorno for positivo envia os dados para a jTable
            lstPesquisa = ctrn.pesquisaPadrao(Banco.ATTRIBUTE_ABREVIADO, pesq.getCriterio(), pesq.getOpcao());
          }
          break;
      }
    }
    return lstPesquisa;
  }

  public void report() throws JRException, Exception {
    BancoReport mReport = new BancoReport();
    mReport.geraRelatorio();
//    Master.setTextJlStatus("");
//    Master.setJpbStatusIndeterminate(false);
  }

  public Banco getProduto() {
    return banco;
  }

  public void setProduto(Banco produto) {
    this.banco = produto;
  }

  public boolean isModoConsulta() {
    return modoConsulta;
  }

  public void setModoConsulta(boolean modoConsulta) {
    this.modoConsulta = modoConsulta;
  }
}